package Classes;

/**
 * 
 * @author JAVA - LI
 *
 */
public class Estabelecimento {
	private String nome;
	private String tipoDeRefeicao;
	private String endereco;
	
	/**
	 * Cria um estabelecimento.
	 * @param nome Nome do restaurante.
	 * @param endereco Endereco do restaurante. 
	 * @param tipoDeRefeicao Tipo de refeicao.
	 * @throws Exception Lanca excessao de strings vazias.
	 */
	public Estabelecimento(String nome,String endereco, String tipoDeRefeicao) throws Exception{
		if(nome.replace(" ","").equals("")){
			throw new Exception("Nome do Estabelecimento vazio!");
		}
	
	if (endereco.replace(" ", "").equals("")){
			throw new Exception("Endereco do Estabelecimento vazio!");
		}
		
		if (tipoDeRefeicao.replace(" ", "").equals("")){
			throw new Exception("Tipo de refeicao do Estabelecimento vazio!");
		}
		
		this.endereco = endereco;
		this.nome = nome;
		this.tipoDeRefeicao = tipoDeRefeicao;
	}
	
	/**
	 * Retorna o nome do estabelecimento.
	 * @return O nome do estabelecimento.
	 */
	public String getNome() {
		return nome;
	}
	
	/**
	 * Retorna um boolean, alterando o nome do estabelecimento.
	 * @param nome O novo nome do estabelecimento.
	 * @return Um boolean.
	 */
	public boolean setNome(String nome) {
		if(nome.replace(" ","").equals("")){
			return false;
		}
		this.nome = nome;
		return true;
	}
	
	/**
	 * Retorna o tipo de refeicao do estabelecimento.
	 * @return O tipo de refeicao do estabelecimento.
	 */
	public String getTipoDeRefeicao() {
		return tipoDeRefeicao;
	}
	
	/**
	 * Retorna um booelan, alterando o tipo de refeicao.
	 * @param tipoDeRefeicao O novo tipo de refeicao.
	 * @return Um boolean e o novo tipo de refeicao.
	 */
	public boolean setTipoDeRefeicao(String tipoDeRefeicao) {
		if(tipoDeRefeicao.replace(" ","").equals("")){
			return false;
		}
		this.tipoDeRefeicao = tipoDeRefeicao;
		return true;
	}
	
	/**
	 * Retorna um booelan, alterando o endereco.
	 * @param endereco O novo endereco.
	 * @return Um boolean e o novo endereco.
	 */
	public boolean setEndereco(String endereco){
		if(endereco.replace(" ","").equals("")){
			return false;
		}
		this.endereco = endereco;
		return true;
	}
	
	/**
	 * Retorna o endereco do restaurante.
	 * @return o endedereco do restaurante.
	 */
	 
	public String getEndereco(){
		return endereco;
	}

	@Override
	/**
	 * Retorna um inteiro simbolizando o endereco de memoria.
	 */
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((endereco == null) ? 0 : endereco.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((tipoDeRefeicao == null) ? 0 : tipoDeRefeicao.hashCode());
		return result;
	}

	@Override
	/**
	 * Retorna um boolean comparando se dois objetos forem iguais.
	 */
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Estabelecimento other = (Estabelecimento) obj;
		if (endereco == null) {
			if (other.endereco != null)
				return false;
		} else if (!endereco.equals(other.endereco))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (tipoDeRefeicao == null) {
			if (other.tipoDeRefeicao != null)
				return false;
		} else if (!tipoDeRefeicao.equals(other.tipoDeRefeicao))
			return false;
		return true;
	}
	
	@Override
	public String toString() {
		return "Nome: " + nome + ", Endereco: " + endereco
				+ ", Tipo de refeicao: " + tipoDeRefeicao;
	}
	
}
